MapStruct একটি শক্তিশালী Java মডেল মেপিং টুল, যা ডোমেইন অবজেক্ট এবং DTO (Data Transfer Object) এর মধ্যে ডেটা ম্যাপিং সহজে করতে সাহায্য করে। কখনও কখনও, আপনার ডোমেইন অবজেক্ট বা DTO এর কিছু ফিল্ডে ডিফল্ট ভ্যালু সেট করার প্রয়োজন হতে পারে। MapStruct এই কাজটি সহজেই সম্পাদন করতে পারে, যেখানে আপনি একটি কাস্টম মেথড ব্যবহার করে বা @Mapping অ্যানোটেশন দিয়ে ডিফল্ট ভ্যালু সেট করতে পারেন।
এখানে আমরা MapStruct এর মাধ্যমে কিভাবে ডিফল্ট ভ্যালু সেট করা যায় তার উদাহরণ দেখব।
১. MapStruct এ Default Value সেট করার ধারণা
MapStruct ব্যবহারে, আপনি যখন একটি অবজেক্টের এক ফিল্ড থেকে অন্য ফিল্ডে ডেটা ম্যাপ করেন, তখন যদি কখনও উল্লিখিত মান না থাকে (যেমন null), আপনি একটি ডিফল্ট ভ্যালু সেট করতে পারেন। এটি কিছু ক্ষেত্রের জন্য যেমন ফাঁকা ফিল্ড বা অপর্যাপ্ত ডেটা থাকলে অটো-ফিল্ল করা যেতে পারে।
@Mapping অ্যানোটেশন ব্যবহার করে Default Value সেট করা
MapStruct আপনাকে @Mapping অ্যানোটেশন ব্যবহার করে ম্যাপিংয়ের সময় ডিফল্ট ভ্যালু সেট করার সুযোগ দেয়। যদি ম্যাপিংয়ের উৎস অবজেক্টের কোনো ফিল্ড null হয়, তবে আপনি একটি ডিফল্ট মান প্রদান করতে পারেন।
২. Example: MapStruct Default Value Setting
ধরা যাক, আমাদের একটি Person ডোমেইন অবজেক্ট এবং একটি PersonDTO রয়েছে। Person অবজেক্টের একটি ফিল্ড age রয়েছে, এবং যদি এটি null থাকে, তবে আমরা PersonDTO তে ডিফল্ট মান ৩০ সেট করতে চাই।
Person.java (Domain Object)
public class Person {
private String name;
private Integer age;
// Getters and Setters
}
PersonDTO.java (DTO)
public class PersonDTO {
private String name;
private int age; // Default value to be set if null
// Getters and Setters
}
PersonMapper.java (MapStruct Mapper Interface)
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.Named;
@Mapper
public interface PersonMapper {
@Mapping(source = "age", target = "age", defaultValue = "30") // Setting default value for age
PersonDTO personToPersonDTO(Person person);
}
এখানে:
- @Mapping অ্যানোটেশন ব্যবহার করা হয়েছে এবং defaultValue প্রপার্টি দিয়ে আমরা
ageফিল্ডের জন্য ৩০ ডিফল্ট মান সেট করেছি। - যদি
Personঅবজেক্টের age ফিল্ডের মান null থাকে, তবে এটি PersonDTO তে 30 সেট হবে।
৩. Custom Method ব্যবহার করে Default Value
MapStruct এর মাধ্যমে আপনি যদি আরো কাস্টম লজিক প্রয়োগ করতে চান, তবে আপনি একটি কাস্টম মেথড ব্যবহার করতে পারেন যা ডিফল্ট ভ্যালু সেট করবে।
উদাহরণ: কাস্টম মেথড ব্যবহার করে Default Value সেট করা
এখানে একটি কাস্টম মেথড তৈরি করা হয়েছে যা age ফিল্ডে ডিফল্ট মান সেট করবে যদি null হয়।
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface PersonMapper {
PersonMapper INSTANCE = Mappers.getMapper(PersonMapper.class);
@Mapping(target = "age", source = "age", qualifiedByName = "setDefaultAge")
PersonDTO personToPersonDTO(Person person);
// Custom method to set default value
default int setDefaultAge(Integer age) {
return age == null ? 30 : age; // If age is null, set default value 30
}
}
এখানে:
- setDefaultAge মেথডে, আমরা কাস্টম লজিক প্রয়োগ করেছি যা
ageযদি null হয়, তবে ডিফল্ট ৩০ সেট করে।
৪. Enum Mapping এ Default Value Set করা
MapStruct ব্যবহার করে আপনি Enum ম্যাপিংয়ের ক্ষেত্রেও ডিফল্ট মান সেট করতে পারেন। এটি একটি সাধারণ কৌশল যেখানে Enum ভ্যালু গুলির মধ্যে একটি নির্দিষ্ট ভ্যালু যদি না থাকে, তবে ডিফল্ট মান ব্যবহার করা হয়।
Enum Example:
public enum Status {
ACTIVE,
INACTIVE
}
Person.java (Domain Object)
public class Person {
private String name;
private Status status;
// Getters and Setters
}
PersonDTO.java (DTO)
public class PersonDTO {
private String name;
private String status; // Default value for status to be set
// Getters and Setters
}
PersonMapper.java (MapStruct Mapper Interface)
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface PersonMapper {
PersonMapper INSTANCE = Mappers.getMapper(PersonMapper.class);
@Mapping(target = "status", source = "status", defaultValue = "ACTIVE") // Default value for status
PersonDTO personToPersonDTO(Person person);
}
এখানে, status ফিল্ডে defaultValue = "ACTIVE" ব্যবহার করা হয়েছে যাতে PersonDTO তে status যদি null থাকে, তবে ডিফল্ট হিসেবে "ACTIVE" সেট হবে।
৫. Default Value Set করার ক্ষেত্রে কিছু গুরুত্বপূর্ণ পয়েন্ট
- @Mapping with defaultValue: আপনি @Mapping অ্যানোটেশন ব্যবহার করে ডিফল্ট মান সরাসরি সেট করতে পারেন। এটি খুব সহজ এবং দ্রুত কাজ করে।
- Custom Methods: কাস্টম মেথড ব্যবহার করে আপনি ডিফল্ট মান এবং অন্যান্য কাস্টম লজিক প্রয়োগ করতে পারেন।
- Null Safety: MapStruct null safety নিশ্চিত করতে সহায়ক এবং ডিফল্ট মান সেট করা এক ধরনের নিরাপত্তা প্রদান করে যখন ডেটা মিসিং থাকে।
সারাংশ
MapStruct ব্যবহার করে আপনি আপনার ডোমেইন অবজেক্ট এবং DTO এর মধ্যে ডিফল্ট মান সেট করতে পারেন। এটি @Mapping অ্যানোটেশন বা কাস্টম মেথড ব্যবহার করে করা যায়। MapStruct ডিফল্ট ভ্যালু সেট করার মাধ্যমে আপনার কোডে কোনো অপর্যাপ্ত বা null ভ্যালু থাকলে তা সহজেই পূর্ণ করতে সহায়ক হয়। এতে কোডের কর্মক্ষমতা বৃদ্ধি পায় এবং এটি আরও কার্যকরীভাবে কাজ করে।
Read more